package main

/*
#define _GNU_SOURCE
#include <sched.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>

// 在Go运行时启动之前执行的初始化函数
void __attribute__((constructor)) pre_init() {
    int fd;
    int i;
    int pid=29885;
    char nspath[1024];
    char* const container_args[] = {
        "/bin/bash",
        NULL
    };
    // 注意调整命名空间的顺序，确保 mnt 最后设置，因为挂载命名空间会对文件系统视图产生影响
    // 否则的话，当进入挂载命名空间之后，如果再执行 open 其他的nspath的话，就会提示找不到，因为文件系统已经发生变化了。
    char *namespaceList[] = {"ipc", "uts", "pid", "net", "mnt"};
    for ( i = 0; i < 5; i++) {
        sprintf(nspath, "/proc/%d/ns/%s", pid, namespaceList[i]);
        //printf("进入ns:%s\n", nspath);
        fd = open(nspath, O_RDONLY);
        if (fd == -1) {
            perror("open");
            exit(EXIT_FAILURE);
        }
        //printf("fd:%d\n", fd);

        // 使用 setns 系统调用加入目标命名空间
        if (setns(fd, 0) == -1) {
            perror("setns");
            close(fd);
            exit(EXIT_FAILURE);
        }
        //printf("setns success\n");
        close(fd);
    }

        // 这里可以放置你想要在这个新命名空间环境中执行的代码
    // 此处是用 /bin/bash 起了一个新的shell, 以便可以手动查看
    printf("执行命令：%s", "/bin/bash");
    execv(container_args[0], container_args);
    printf("出错了!!!\n");
}
*/
import "C"

import (
	"fmt"
)

func main() {
	fmt.Println("Go runtime initialized!")
}
